#ifndef DATASTRUCTURE_ARRAYLIST_H
#define DATASTRUCTURE_ARRAYLIST_H

#define ArrayListMaxSize 10
typedef char ElemType;

/*
 * 顺序表
 */
typedef struct {
    // 元素
    ElemType *data;
    // 容量
    int dataLength;
    // 长度
    int size;
} ArrayList;

// 验证数据是否正常
int verificationArrayList(ArrayList *arrayList);

// 初始化顺序表
void initArrayList(ArrayList *arrayList, int size);

// 尾插入元素
int addArrayList(ArrayList *arrayList, ElemType e);

// 一个顺序表追加到另一个顺序表
int addAllArrayList(ArrayList *arrayList, ArrayList *al);

// 在给定位置插入元素
int addIndexArrayList(ArrayList *arrayList, int index, ElemType e);

// 输出顺序表
void showArrayList(ArrayList *arrayList);

// 顺序表长度
int arrayListLength(ArrayList *arrayList);

// 判断顺序表是否为空
int isEmptyArrayList(ArrayList *arrayList);

// 顺序表给定位置的元素
ElemType getElemTypeArrayList(ArrayList *arrayList, int index);

// 输出给定元素的位置
int getIndexArrayList(ArrayList *arrayList, ElemType e);

// 删除顺序表，释放内存
void deleteArrayList(ArrayList *arrayList);

/*
 * 以第一个元素为分界线，将所有小于它的元素移到该元素的前面，大于它的元素移到该元素的后面
 */
void move(ArrayList *arrayList);

void arrayListTest();

#endif //DATASTRUCTURE_ARRAYLIST_H